/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.sapra.eai.aig;

import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import javax.xml.parsers.DocumentBuilderFactory;
import org.sapra.abc.dArchivo;
import org.sapra.abc.dPracticante;
import org.sapra.dao.Archivo;
import org.sapra.dao.ModelXML;
import org.sapra.dao.Polizaseguro;
import org.sapra.dao.Practicante;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 *
 * @author luiz
 */
public class aig {
//    static String pdfDirectory="/opt/innoapps/tomcat/webapps/ROOT/practicantes/pdf";
    static String polizasXml="C:/Users/develop/Documents/DocsSapra/XML";
    static String ipAig="http://pee.topsoluciones.com.mx/wssap/poliza.asmx";
    static String tokenAig="056kkhd983pdnldjJOSDIEJldi47462";
    static String impCaintra="http://pee.topsoluciones.com.mx/caintraPolizas/impresionPolizaAccidente.asp?tipoSalida=2&Poliza=";
    public aig(){}
//Poliza poliza
    public int CreatePoliza(int idPract){
        int res=1;
        try {

                ModelXML modelo=new ModelXML(idPract,0);
                StringBuffer xml=conversion(modelo);
                String x=solicitaPolizaCaintra(xml.toString());
                System.out.println("\n\n\n\n"+x+"\n\n\n");
                x=x.substring(x.indexOf("<Poliza>")+8 ,x.indexOf("</Poliza>"));
                dPracticante dp=new dPracticante();
                dp.UpdatePoliza(x, impCaintra+x, idPract);

                Archivo ar=new Archivo();

                ar.setRuta(impCaintra+x);
                ar.setMimeType("application/pdf");
                ar.setNombre("polizaseguro"+x);
                ar.setFk_ligapracticanteId(idPract);
                ar.setExtension("pdf");
                ar.setDescripcion("poliza generada por el sistema");
                dArchivo da=new dArchivo();
                da.saveArchivo(ar);

        } catch (Exception e) {

            e.printStackTrace();
            return -1;
        }
        return res;
    }





    static void imprimePoliza(Practicante p){
            Archivo archivo = new Archivo();
            boolean contrato=false;
            SimpleDateFormat sdf = new SimpleDateFormat("dd_MM_yyyy");
            try {
                if(contrato==false){
                    archivo=new Archivo();
                    archivo.setDescripcion("PLAN ESCUELA");
                    archivo.setNombre("CONVENIO_PLAN_ESCUELA_EMPRESA_" + sdf.format(p.getFec_inicioContrato()) );
                    archivo.setExtension("PDF");
                    archivo.setMimeType("application/pdf");
                    archivo.setRuta("servletConvenio?id=" + p.getPracticanteId());
                    archivo.setFk_ligapracticanteId(p.getPracticanteId());

                }

        } catch (Exception e) {
        }

    }

    public static StringBuffer conversion(ModelXML modelo){
        StringBuffer sb=new StringBuffer();
        try {
                Document doc;
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                doc = dbf.newDocumentBuilder().newDocument();
						//Elemen
		Element root = doc.createElement("SolicitudPoliza");
		root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
		root.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
		Element conexion = doc.createElement("Conexion");
		Element token = doc.createElement("Token");
						//TODO
		token.appendChild( doc.createTextNode(tokenAig));
		Element ip = doc.createElement("IP");
		ip.appendChild( doc.createTextNode("192.168.10.11"));
		Element negocio = doc.createElement("Negocio");
		negocio.appendChild( doc.createTextNode("Pruebas"));
		conexion.appendChild(token);
		conexion.appendChild(ip);
		conexion.appendChild(negocio);
		root.appendChild(conexion);
			 			//generales
		Element generales = doc.createElement("Generales");
		Element plan = doc.createElement("Plan");
		String plan_ = modelo.getNombre_plan().startsWith("Opcion 1")? "1":"2";
		plan.appendChild( doc.createTextNode(plan_));
		Element estatusPago = doc.createElement("EstatusPago");
		estatusPago.appendChild( doc.createTextNode("1"));
		Element inicioVigencia = doc.createElement("InicioVigencia");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		inicioVigencia.appendChild( doc.createTextNode(sdf.format(modelo.getVigencia())));
		Element duracion = doc.createElement("Duracion");
		duracion.appendChild( doc.createTextNode(""+modelo.getDuracion()));
		generales.appendChild(plan);
		generales.appendChild(estatusPago);
		generales.appendChild(inicioVigencia);
		generales.appendChild(duracion);
		root.appendChild(generales);
						//Contratante
		Element contratante = doc.createElement("Contratante");
		Element nombre = doc.createElement("Nombre");
		nombre.appendChild( doc.createTextNode(modelo.getRazon_empresa()));
		Element rfc = doc.createElement("RFC");
		rfc.appendChild( doc.createTextNode(modelo.getRfc_empresa()));
		Element calleNumero = doc.createElement("CalleNumero");
		calleNumero.appendChild( doc.createTextNode(modelo.getEmp_calle()));
		Element colonia = doc.createElement("Colonia");
		colonia.appendChild( doc.createTextNode(modelo.getEmp_colonia()));
		contratante.appendChild(nombre);
		contratante.appendChild(rfc);
		contratante.appendChild(calleNumero);
		contratante.appendChild(colonia);
		root.appendChild(contratante);
						//Asegurado
		Element asegurado = doc.createElement("Asegurado");
		Element nombre2 = doc.createElement("Nombre");
		nombre2.appendChild( doc.createTextNode(modelo.getPrac_nom()));
		Element rfc2 = doc.createElement("RFC");
		rfc2.appendChild( doc.createTextNode(modelo.getRfc_prac()));
		Element calleNumero2 = doc.createElement("CalleNumero");
		calleNumero2.appendChild( doc.createTextNode(modelo.getPrac_calle()));
		Element colonia2 = doc.createElement("Colonia");
		colonia2.appendChild( doc.createTextNode(modelo.getPrac_colonia()));
		asegurado.appendChild(nombre2);
		asegurado.appendChild(rfc2);
		asegurado.appendChild(calleNumero2);
		asegurado.appendChild(colonia2);
		root.appendChild(asegurado);
						//Beneficiarios
		Element beneficiarios = doc.createElement("Beneficiarios");
		Element beneficiario1 = doc.createElement("Beneficiario");
		Element beneficiario2 = doc.createElement("Beneficiario");
		Element nombre1 = doc.createElement("Nombre");
		nombre1.appendChild( doc.createTextNode(modelo.getNombre1()));
		Element parentesco1 = doc.createElement("Parentesco");
		parentesco1.appendChild( doc.createTextNode(modelo.getParentesco1()));
		Element porcentaje1 = doc.createElement("Porcentaje");
		porcentaje1.appendChild( doc.createTextNode(modelo.getPorcentaje1() +""));
		Element nombre2_ = doc.createElement("Nombre");
		nombre2_.appendChild( doc.createTextNode(modelo.getNombre2()));
		Element parentesco2 = doc.createElement("Parentesco");
		parentesco2.appendChild( doc.createTextNode(modelo.getParentesco2()));
		Element porcentaje2 = doc.createElement("Porcentaje");
		porcentaje2.appendChild( doc.createTextNode(modelo.getPorcentaje2()+""));
		beneficiario1.appendChild(nombre1);
		beneficiario1.appendChild(parentesco1);
		beneficiario1.appendChild(porcentaje1);
		beneficiario2.appendChild(nombre2_);
		beneficiario2.appendChild(parentesco2);
		beneficiario2.appendChild(porcentaje2);
		beneficiarios.appendChild(beneficiario1);
		beneficiarios.appendChild(beneficiario2);
		root.appendChild(beneficiarios);
		doc.appendChild(root);

                OutputFormat format = new OutputFormat(doc);
		format.setIndenting(true);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		OutputStreamWriter osw =  new OutputStreamWriter(baos);
		XMLSerializer serializer = new XMLSerializer(osw,format);
		serializer.serialize(doc);

                FileWriter fw = new FileWriter(new File(polizasXml + "/" + modelo.getPracticanteId() + "_alta_dom.xml"));
		//FileWriter fw = new FileWriter(new File("C:/Documents and Settings/Luiz/Escritorio/pruebas_sapra/" + modelo.getPracticanteId() + "_alta_dom.xml"));
                //FileWriter fw = new FileWriter(new File("/home/cobain/Escritorio/" + modelo.getPracticanteId() + "_alta_dom.xml"));
                serializer = new XMLSerializer(fw,format);
		serializer.serialize(doc);
		fw.close();

                baos.flush();
		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
		BufferedReader br = new BufferedReader(new InputStreamReader(bais));
                StringBuffer xmlEntrada = new StringBuffer();
		String line ="";
		while((line =br.readLine())!=null){
			xmlEntrada.append(line);
			xmlEntrada.append(System.getProperty("line.separator"));
                        System.out.println(line);
		}
                sb=xmlEntrada;
                System.out.println(sb);

        } catch (Exception e) {
        }

        return sb;

    }

    public int xmlBaja(int idPrac,String numPoliza,int i){
        int res=1;
        try {
                Document doc;
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                doc = dbf.newDocumentBuilder().newDocument();
                doc = dbf.newDocumentBuilder().newDocument();
                                                    //Elemen
                Element root = doc.createElement("BajaPoliza");
                root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
                root.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
                Element conexion = doc.createElement("Conexion");
                Element token = doc.createElement("Token");
						//TODO
		token.appendChild( doc.createTextNode(tokenAig));
		Element ip = doc.createElement("IP");
		ip.appendChild( doc.createTextNode("192.168.10.11"));
		Element negocio = doc.createElement("Negocio");
		negocio.appendChild( doc.createTextNode("Pruebas"));
		conexion.appendChild(token);
		conexion.appendChild(ip);
		conexion.appendChild(negocio);
		root.appendChild(conexion);
		Element polizaE = doc.createElement("Poliza");
		Element numeroPoliza = doc.createElement("NumeroPoliza");
		numeroPoliza.appendChild( doc.createTextNode(numPoliza));
		Element estatus = doc.createElement("Estatus");
		polizaE.appendChild(numeroPoliza);
		polizaE.appendChild(estatus);

		root.appendChild(polizaE);
		doc.appendChild(root);

                //SAXWriter
                OutputFormat format = new OutputFormat(doc);
                format.setIndenting(true);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		OutputStreamWriter osw =  new OutputStreamWriter(baos);
		XMLSerializer serializer = new XMLSerializer(osw,format);
		serializer.serialize(doc);


						//JUST FOR DEBUG
		FileWriter fw = new FileWriter(new File(polizasXml + "/" + idPrac + "_baja_dom_num_"+i+".xml"));
                //FileWriter fw = new FileWriter(new File("/home/luiz/Escritorio/" + idPrac + "_baja_dom_num_"+i+".xml"));
                //FileWriter fw = new FileWriter(new File("/home/cobain/Escritorio/" + idPrac + "_baja_dom_num_"+i+".xml"));
		serializer = new XMLSerializer(fw,format);
		serializer.serialize(doc);
		fw.close();


		baos.flush();
		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
						//baos.close();
		BufferedReader br = new BufferedReader(new InputStreamReader(bais));

		StringBuffer xmlEntrada = new StringBuffer();
		String line ="";
		while((line =br.readLine())!=null){
				xmlEntrada.append(line);
				xmlEntrada.append(System.getProperty("line.separator"));

			}
                bajaPoliza(xmlEntrada.toString());
        } catch (Exception e) {
                return -1;
        }
        return res;
    }

   public void xmlEditar(Polizaseguro ps){
       StringBuffer sb=new StringBuffer();
           try {
                ModelXML modelo=new ModelXML(ps.getFk_practicanteId(),ps.getPolizaSeguroId());
               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
						//XMLInputFactory xmlfactory = XMLInputFactory.newInstance();
		Document doc;
               doc = dbf.newDocumentBuilder().newDocument();
               //Elemen
               Element root = doc.createElement("ActualizaPoliza");
               root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
               root.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
               Element conexion = doc.createElement("Conexion");
               Element token = doc.createElement("Token");
               //TODO
               token.appendChild(doc.createTextNode(tokenAig));
               Element ip = doc.createElement("IP");
               ip.appendChild(doc.createTextNode("10.10.10.10"));
               Element negocio = doc.createElement("Negocio");
               negocio.appendChild(doc.createTextNode("Pruebas"));
               conexion.appendChild(token);
               conexion.appendChild(ip);
               conexion.appendChild(negocio);
               root.appendChild(conexion);
               Element polizaE = doc.createElement("Poliza");
               Element numeroPoliza = doc.createElement("NumeroPoliza");
               numeroPoliza.appendChild(doc.createTextNode(ps.getNumero_Poliza()));


               Element estatus = doc.createElement("Estatus");
               polizaE.appendChild(numeroPoliza);
               polizaE.appendChild(estatus);

               root.appendChild(polizaE);


               //generales
               Element generales = doc.createElement("Generales");
               Element plan = doc.createElement("Plan");
               String plan_ = modelo.getNombre_plan().startsWith("opcion 1") ? "1" : "2";
               plan.appendChild(doc.createTextNode(plan_));
               Element estatusPago = doc.createElement("EstatusPago");
               estatusPago.appendChild(doc.createTextNode("1"));
               Element inicioVigencia = doc.createElement("InicioVigencia");
               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
               inicioVigencia.appendChild(doc.createTextNode(sdf.format(ps.getFec_inicio())));
               Element duracion = doc.createElement("Duracion");
               duracion.appendChild(doc.createTextNode(modelo.getDuracion() + ""));
               generales.appendChild(plan);
               generales.appendChild(estatusPago);
               generales.appendChild(inicioVigencia);
               generales.appendChild(duracion);
               root.appendChild(generales);
               //Contratante
               Element contratante = doc.createElement("Contratante");
               Element nombre = doc.createElement("Nombre");
               nombre.appendChild(doc.createTextNode(modelo.getRazon_empresa()));
               Element rfc = doc.createElement("RFC");
               rfc.appendChild(doc.createTextNode(modelo.getRfc_empresa()));
               Element calleNumero = doc.createElement("CalleNumero");
               calleNumero.appendChild(doc.createTextNode(modelo.getEmp_calle()));
               Element colonia = doc.createElement("Colonia");
               colonia.appendChild(doc.createTextNode(modelo.getEmp_colonia()));
               contratante.appendChild(nombre);
               contratante.appendChild(rfc);
               contratante.appendChild(calleNumero);
               contratante.appendChild(colonia);
               root.appendChild(contratante);
               //Asegurado
               Element asegurado = doc.createElement("Asegurado");
               Element nombre2 = doc.createElement("Nombre");
               nombre2.appendChild(doc.createTextNode(modelo.getPrac_nom()));
               Element rfc2 = doc.createElement("RFC");
               rfc2.appendChild(doc.createTextNode(modelo.getRfc_prac()));
               Element calleNumero2 = doc.createElement("CalleNumero");
               calleNumero2.appendChild(doc.createTextNode(modelo.getPrac_calle()));
               Element colonia2 = doc.createElement("Colonia");
               colonia2.appendChild(doc.createTextNode(modelo.getPrac_colonia()));
               asegurado.appendChild(nombre2);
               asegurado.appendChild(rfc2);
               asegurado.appendChild(calleNumero2);
               asegurado.appendChild(colonia2);
               root.appendChild(asegurado);
               //Beneficiarios
               Element beneficiarios = doc.createElement("Beneficiarios");
               Element beneficiario1 = doc.createElement("Beneficiario");
               Element beneficiario2 = doc.createElement("Beneficiario");
               Element nombre1 = doc.createElement("Nombre");
               nombre1.appendChild(doc.createTextNode(modelo.getNombre1()));
               Element parentesco1 = doc.createElement("Parentesco");
               parentesco1.appendChild(doc.createTextNode(modelo.getParentesco1()));
               Element porcentaje1 = doc.createElement("Porcentaje");
               porcentaje1.appendChild(doc.createTextNode(modelo.getPorcentaje1() + ""));
               Element nombre2_ = doc.createElement("Nombre");
               nombre2_.appendChild(doc.createTextNode(modelo.getNombre2()));
               Element parentesco2 = doc.createElement("Parentesco");
               parentesco2.appendChild(doc.createTextNode(modelo.getParentesco2()));
               Element porcentaje2 = doc.createElement("Porcentaje");
               porcentaje2.appendChild(doc.createTextNode(modelo.getPorcentaje2() + ""));
               beneficiario1.appendChild(nombre1);
               beneficiario1.appendChild(parentesco1);
               beneficiario1.appendChild(porcentaje1);
               beneficiario2.appendChild(nombre2_);
               beneficiario2.appendChild(parentesco2);
               beneficiario2.appendChild(porcentaje2);
               beneficiarios.appendChild(beneficiario1);
               beneficiarios.appendChild(beneficiario2);
               root.appendChild(beneficiarios);
               doc.appendChild(root);

	       OutputFormat format = new OutputFormat(doc);
               format.setIndenting(true);
               ByteArrayOutputStream baos = new ByteArrayOutputStream();
               OutputStreamWriter osw = new OutputStreamWriter(baos);
               XMLSerializer serializer = new XMLSerializer(osw, format);
               serializer.serialize(doc);

                //FileWriter fw = new FileWriter(new File("/home/luiz/Escritorio/" + modelo.getPracticanteId() + "_mod_dom.xml"));polizasXml
                FileWriter fw = new FileWriter(new File(polizasXml+"/" + modelo.getPracticanteId() + "_mod_dom.xml"));
                //FileWriter fw = new FileWriter(new File("/home/cobain/Escritorio/" + modelo.getPracticanteId() + "_mod_dom.xml"));//polizasXml
                serializer = new XMLSerializer(fw,format);
		serializer.serialize(doc);
		fw.close();

                baos.flush();
		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
		BufferedReader br = new BufferedReader(new InputStreamReader(bais));
                StringBuffer xmlEntrada = new StringBuffer();
                System.out.println(xmlEntrada);
		String line ="";
		while((line =br.readLine())!=null){
			xmlEntrada.append(line);
			xmlEntrada.append(System.getProperty("line.separator"));
                        System.out.println(line);
		}
                sb=xmlEntrada;
                actualizaPoliza(sb.toString());
           } catch (Exception e) {
           }


   }


    // Todo el Pedo de la Poliza
         private static String solicitaPolizaCaintra(java.lang.String strXMLEntrada) {
                
            org.sapra.eai.aig.ws.Poliza service = new org.sapra.eai.aig.ws.Poliza();
            org.sapra.eai.aig.ws.PolizaSoap port = service.getPolizaSoap();
            return port.solicitaPolizaCaintra(strXMLEntrada);
            }

            private static String bajaPoliza(java.lang.String strXMLEntrada) {
                org.sapra.eai.aig.ws.Poliza service = new org.sapra.eai.aig.ws.Poliza();
                org.sapra.eai.aig.ws.PolizaSoap port = service.getPolizaSoap();
                return port.bajaPoliza(strXMLEntrada);
            }

    private static String actualizaPoliza(java.lang.String strXMLEntrada) {
        org.sapra.eai.aig.ws.Poliza service = new org.sapra.eai.aig.ws.Poliza();
        org.sapra.eai.aig.ws.PolizaSoap port = service.getPolizaSoap();
        return port.actualizaPoliza(strXMLEntrada);
    }





}
